﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SnongPhoneShop.Models;

namespace SnongPhoneShop.Controllers
{
    public class Tai_KhoanController : Controller
    {
        //
        // GET: /Account/
        StoredProcedure sp = new StoredProcedure();

        public ActionResult Index()
        {
            if (Session["User"] != null)
            {
                string TenDangNhap = Session["User"].ToString();
                ViewBag.ListTP = new SelectList(sp.GetListProvince(), "MaTinh_TP", "TenTinh_TP");
                var KH = sp.GetUserByID(TenDangNhap);
                return View(KH);
            }
            return RedirectToAction("Index", "Home");   
        }

        public ActionResult Cap_Nhat_TK()
        {
            if (Session["User"] != null)
            {
                string TenDangNhap = Session["User"].ToString();
                var R = sp.GetRegisterModelsByID(TenDangNhap);
                ViewBag.ListTP = new SelectList(sp.GetListProvince(), "MaTinh_TP", "TenTinh_TP");
                return View(R);
            }
            return RedirectToAction("Index", "Home");
        }

        [HttpPost]
        public ActionResult Cap_Nhat_TK(RegisterModels R)
        {
            if (Session["User"] != null)
            {
                ViewBag.ListTP = new SelectList(sp.GetListProvince(), "MaTinh_TP", "TenTinh_TP", R.MaTinh_TP);
                if (ModelState.IsValid)
                {
                    string TenDangNhap = Session["User"].ToString();
                    TempData["ToastEnable"] = true;
                    switch (sp.UpdateAccountInfoByID(TenDangNhap, R))
                    {
                        case 3: TempData["Message"] = "Cập nhật tài khoản thành công!";
                            return RedirectToAction("Index");
                        case 2: TempData["Message"] = "Chứng minh thư đã tồn tại!";
                            return View(R);
                        case 1: TempData["Message"] = "Email đã tồn tại!";
                            return View(R);
                    }
                }
                return View(R);
            }
            return RedirectToAction("Index", "Home");
        }

        public ActionResult Doi_Mat_Khau()
        {
            if (Session["User"] == null) return RedirectToAction("Index", "Home");
            return View();
        }

        [HttpPost]
        public ActionResult Doi_Mat_Khau(ChangePassword CP)
        {
            if (Session["User"] != null)
            {
                if (ModelState.IsValid)
                {
                    string TenDangNhap = Session["User"].ToString();
                    if (sp.isValidPassword(TenDangNhap, CP.OldPass))
                    {
                        sp.SetPasswordForUserByID(TenDangNhap, CP.NewPass);
                        TempData["ToastEnable"] = true;
                        TempData["Message"] = "Thay đổi mật khẩu thành công!";
                        return RedirectToAction("Index");
                    }
                    else
                    {
                        TempData["ToastEnable"] = true;
                        TempData["Message"] = "Mật khẩu hiện tại không chính xác";
                        return View(CP);
                    }
                }
                else return View(CP);
            }
            return RedirectToAction("Index", "Home");
        }

        public ActionResult DS_Don_Hang()
        {
            if (Session["User"] != null)
            {
                string TenDangNhap = Session["User"].ToString();
                var ListDH = sp.GetOrdersByUserID(TenDangNhap).OrderByDescending(m => m.MaPhieuDatHang).ToList();
                return View(ListDH);
            }
            return RedirectToAction("Index", "Home");
        }

        public ActionResult Gio_Hang()
        {
            //if (Session["User"] != null)
            //{
                var GH = Session["Cart"];
                return View(GH);
            //}
            //return RedirectToAction("Index", "Home");
        }

        public ActionResult Cap_Nhat_GH()
        {
            var LCart = Session["Cart"];
            return View(LCart);
        }

        [HttpPost]
        public ActionResult Cap_Nhat_GH(List<Cart> LstCart)
        {
            //if (Session["User"] != null)
            //{
                if (ModelState.IsValid)
                {
                    try
                    {
                        if (LstCart != null)
                        {
                            if (Session["User"] != null)
                            {
                                WriteCartToCookie(LstCart);
                            }
                            foreach (var Item in LstCart)
                            {
                                var LCart = (List<Cart>)Session["Cart"];
                                var SP = LCart.First(m => m.MaSanPham == Item.MaSanPham);
                                SP.SoLuong = Item.SoLuong;
                            }
                        }
                    }
                    catch { }
                    return RedirectToAction("Gio_Hang");
                }
                else return View(LstCart);
            //}
            //return RedirectToAction("Index", "Home"); 
        }

        public ActionResult Xoa_SP_GH(string ID)
        {
            //if (Session["User"] != null)
            //{
                var LCart = (List<Cart>)Session["Cart"];
                var CurrSP = LCart.First(m => m.MaSanPham.Equals(ID));
                LCart.Remove(CurrSP);
                if (Session["User"] != null)
                {
                    WriteCartToCookie(LCart);
                }
                return RedirectToAction("Cap_Nhat_GH");
            //}
            //return RedirectToAction("Index", "Home");
        }

        //[HttpPost]
        public ActionResult Gui_Don(FormCollection Fc, bool User)
        {
            var LCart = (List<Cart>)Session["Cart"];
            if (User == true)
            {
                try
                {
                    string TenDangNhap = Session["User"].ToString();
                    if (LCart.Count > 0)
                    {
                        int MaPhieuDatDang = sp.CreateBillForUserByID(TenDangNhap);
                        foreach (var Item in LCart) sp.AddItemCartToBill(MaPhieuDatDang, Item);
                        LCart.Clear();
                        WriteCartToCookie(LCart);
                        TempData["ToastEnable"] = true;
                        TempData["Message"] = "Gửi đơn đặt hàng thành công. Giỏ hàng đã được làm mới!<br>Click để xem danh sách đơn hàng.";
                        TempData["LinkToast"] = Url.Action("DS_Don_Hang", "Tai_Khoan");
                        return RedirectToAction("Index", "Home");
                    }
                    TempData["ToastEnable"] = true;
                    TempData["Message"] = "Không thể gửi đơn đặt hàng!<br>Giỏ hàng rỗng.";
                }
                catch
                {
                    TempData["ToastEnable"] = true;
                    TempData["Message"] = "Có lỗi. Không thể gửi đơn đặt hàng!<br>Click để gửi lại.";
                    TempData["LinkToast"] = Url.Action("Gui_Don", "Tai_Khoan", new { User = true });
                }
                return RedirectToAction("Gio_Hang");
            }
            else
            {
                string HoTen = Fc["HoTen"];
                string Email = Fc["Email"];
                string CMT = Fc["CMT"];
                string SDT = Fc["SDT"];
                string DiaChi = Fc["DiaChi"];
                if (HoTen != "" && Email != "" && CMT != "" && SDT != "" && DiaChi != "")
                {
                    int MaPhieuDatDang = sp.CreateBillByInfo(HoTen, Email, CMT, SDT, DiaChi);
                    foreach (var Item in LCart) sp.AddItemCartToBill(MaPhieuDatDang, Item);
                    LCart.Clear();
                    WriteCartToCookie(LCart);
                    TempData["ToastEnable"] = true;
                    TempData["Message"] = "Gửi đơn đặt hàng thành công. Giỏ hàng đã được làm mới!";
                }
                else
                {
                    TempData["ToastEnable"] = true;
                    TempData["Message"] = "Gửi đơn đặt hàng không thành công. Nhập thông tin chưa đầy đủ!";
                    return RedirectToAction("Gio_Hang");
                }
                return RedirectToAction("Index", "Home");
            }
        }

        private void WriteCartToCookie(List<Cart> LCart)
        {
            //if (Request.Cookies["Login"] != null)
            //{
                HttpCookie NewCookie = new HttpCookie("Cart");
                foreach (var Item in LCart)
                {
                    NewCookie.Values.Add(Item.MaSanPham, Item.SoLuong.ToString());
                }
                NewCookie.Expires = DateTime.Now.AddDays(30);
                Response.Cookies.Add(NewCookie);
            //}
        }

        public ActionResult Quen_Mat_Khau()
        {
            if (Session["User"] != null) return RedirectToAction("Index", "Home");
            return View();
        }

        [HttpPost]
        public ActionResult Quen_Mat_Khau(ForgotPassword F)
        {
            if (Session["User"] == null)
            {
                if (ModelState.IsValid)
                {
                    if (sp.isValidToChangePass(F.UserID, F.Email, F.CMT))
                    {
                        sp.SetPasswordForUserByID(F.UserID, F.NewPass);
                        TempData["ToastEnable"] = true;
                        TempData["Message"] = "Thay đổi mật khẩu thành công!";
                        return RedirectToAction("Dang_Nhap");
                    }
                    else
                    {
                        TempData["ToastEnable"] = true;
                        TempData["Message"] = "Thông tin không chính xác!";
                        return View(F);
                    }
                }
                else return View(F);
            }
            return RedirectToAction("Index", "Home");
        }

        #region [Đăng ký]
        public ActionResult Dang_Ky()
        {
            ViewBag.ListTP = new SelectList(sp.GetListProvince(), "MaTinh_TP", "TenTinh_TP");
            if (Session["User"] != null) return RedirectToAction("Index", "Home");
            return View();
        }

        [HttpPost]
        public ActionResult Dang_Ky(RegisterModels R)
        {
            if (Session["User"] == null)
            {
                ViewBag.ListTP = new SelectList(sp.GetListProvince(), "MaTinh_TP", "TenTinh_TP", R.MaTinh_TP);
                if (ModelState.IsValid)
                {
                    TempData["ToastEnable"] = true;
                    switch (sp.AddUserByRegisterModel(R))
                    {
                        case 3: TempData["Message"] = "Đăng ký thành công.<br>Click để đăng nhập!";
                            TempData["LinkToast"] = Url.Action("Dang_Nhap", "Tai_Khoan");
                            return RedirectToAction("Index", "Home");
                        case 2: TempData["Message"] = "Chứng minh thư đã có người sử dụng!";
                            return View(R);
                        case 1: TempData["Message"] = "Email đã có người sử dụng!";
                            return View(R);
                        case 0: TempData["Message"] = "Tên đăng nhập đã có người sử dụng.<br>Hãy chọn một tên khác!";
                            return View(R);
                    }
                }
                return View(R);
            }
            else return RedirectToAction("Index", "Home");
        }
        #endregion
        #region [Đăng nhập]
        public ActionResult Dang_Nhap(string UrlReferer)
        {
            if (UrlReferer == null) ViewBag.UrlReferer = Request.Url.OriginalString;
            else ViewBag.UrlReferer = UrlReferer;
            if (Session["User"] != null) return RedirectToAction("Index", "Home");
            return View();
        }

        [HttpPost]
        public ActionResult Dang_Nhap(FormCollection Fc, string UrlReferer)
        {
            ViewBag.UrlReferer = UrlReferer;
            string TenDangNhap = Fc["TenDangNhap"];
            string MatKhau = Fc["MatKhau"];
            string GhiNho = Fc["GhiNho"];
            var KH = sp.GetUserByID(TenDangNhap, MatKhau);
            if (KH != null)
            {
                Session.Add("User", TenDangNhap);
                
                if (GhiNho.Contains("true"))
                {
                    if (Session["Cart"] != null) WriteCartToCookie((List<Cart>)Session["Cart"]);
                    HttpCookie NewCookie = new HttpCookie("Login");
                    NewCookie.Values.Add("User", TenDangNhap);
                    NewCookie.Expires = DateTime.Now.AddDays(30);
                    Response.Cookies.Add(NewCookie);
                }         
            }
            else
            {
                TempData["ToastEnable"] = true;
                TempData["Message"] = "Tên đăng nhập hoặc mật khẩu không chính xác. Quên mật khẩu?<br>Click để lấy lại mật khẩu!";
                TempData["LinkToast"] = Url.Action("Quen_Mat_Khau", "Tai_Khoan");
            }
            return Redirect(UrlReferer);
        }
        #endregion
        #region [Đăng xuất]
        public ActionResult Dang_Xuat()
        {
            if (Session["User"] != null)
            {
                if (Request.Cookies["Login"] != null)
                {
                    HttpCookie OverrideCookie = Request.Cookies["Login"];
                    OverrideCookie.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(OverrideCookie);
                }
                if (Request.Cookies["Cart"] != null)
                {
                    HttpCookie OverrideCookie = Request.Cookies["Cart"];
                    OverrideCookie.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(OverrideCookie);
                }
                if (Session["User"] != null) Session.Remove("User");
                //if (Session["Cart"] != null) Session.Remove("Cart");
                try
                {
                    return Redirect(Request.UrlReferrer.OriginalString);
                }
                catch
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            return RedirectToAction("Index", "Home");
        }
        #endregion
    }
}
